package co.uk.digitalify;

import pojos.Categoria;
import pojos.Pojo;
import pojos.TipoProducto;
import pojos.Usuario;
import util.Respuesta;
import util.Servicio;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;

public class BuscadorTiendaActivity extends Activity implements ReceptorRespuesta, OnEditorActionListener, OnItemSelectedListener {	

	private EditText edtBuscar;
	private Gson gs=new GsonBuilder().setDateFormat(Servicio.getSdf().toPattern()).create();
	private Usuario usuarioLogueado;
	private Spinner spCategorias;
	private Spinner spSubcategorias;
	private TipoProducto[] tProd;
	private Spinner spOrdenar;
	private Categoria[] categorias;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_buscador_tienda);
		cargarDatos();
		//Probando como se recibe el texto introducido en el seachbox
//		if(!this.getIntent().getStringExtra("termBusqueda").equals(""))			
//			Toast.makeText(this, this.getIntent().getStringExtra("termBusqueda"), Toast.LENGTH_LONG).show();
	}

	private void cargarDatos() {
		// Localizar views
		edtBuscar=(EditText)findViewById(R.id.edtSearchBoxBusc);
		spCategorias=(Spinner)findViewById(R.id.spTipoProdFilter);
		spSubcategorias=(Spinner)findViewById(R.id.spCategoriaFilter);
		spOrdenar=(Spinner)findViewById(R.id.spOrdenarBusc);
		//Gestionar eventos
		edtBuscar.setOnEditorActionListener(this);
		spCategorias.setOnItemSelectedListener(this);
		//Llenar datos
		Bundle extras=this.getIntent().getExtras();		
		edtBuscar.setText(extras.getString("termBusqueda"));
		if(extras.containsKey("UsuarioJSON")) {
			usuarioLogueado=gs.fromJson(extras.getString("UsuarioJSON"), Usuario.class);
		}
		
		String[] critOrd=new String[]{"Nombre","Precio","Valoracion","Visitas"};
		ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, critOrd);
		spOrdenar.setAdapter(adapter);
		TareaConexionBD tbd=new TareaConexionBD(Servicio.getHost(), Servicio.getPuerto(), this, "Categorias");
		tbd.execute(Servicio.getCategorias());
			
		// Aviso
		Toast.makeText(this, "Seleciona y pulsa la lupa", Toast.LENGTH_LONG).show();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.buscador_tienda, menu);
		return true;
	}
	
	@Override 
	public boolean onOptionsItemSelected(MenuItem item) {
		 
        switch (item.getItemId()) {

        case R.id.acercaDe:
        	Intent iAcercaDe = new Intent(this, AcercaDeActivity.class);	 
            startActivity(iAcercaDe);
            break;
        case R.id.ayuda:
            // falta ver si se hace general o especifico para cada pantalla
        	Intent iAyuda = new Intent(this, AyudaActivity.class);	 
            startActivity(iAyuda);
            break;
        case R.id.configuracion:
            // falta concretar que incluimos
        	Intent iConfig = new Intent(this, Configuracion.class);	 
            startActivity(iConfig);
            break;
        }
        return true; 
	}

	@Override
	protected void onResume(){
	// Al volver a la actividad se comprueba el estado de la musica
		if (Musica.get_mireproductor() == null){
			Musica.reproduce(this, R.raw.avenetia_red);
		 }
	    super.onResume();
	}
	
	public void btnBuscarBuscOnClick(View v) {
		busqAvanz();
	}

	private void busqAvanz() {
		Bundle datos=new Bundle();
		int tProdId=((TipoProducto)spCategorias.getSelectedItem()).getId();
		int catId=((Categoria)spSubcategorias.getSelectedItem()).getId();
		String orderBy="prod_"+((String)spOrdenar.getSelectedItem()).toLowerCase();
		datos.putInt("tProdId", tProdId);
		datos.putInt("catId", catId);
		datos.putString("orderBy", orderBy);
		datos.putString("tipo_resp", getString(R.string.busqueda_avanzada));	
		if(usuarioLogueado!=null) {
			String uJson=gs.toJson(usuarioLogueado);
			datos.putString("UsuarioJSON", uJson);			
		}		
		if(edtBuscar.getText()!=null && !edtBuscar.getText().toString().isEmpty()) {
			datos.putStringArray("terminos", edtBuscar.getText().toString().split(" "));
		}
		Intent lanzar=new Intent(this, ListaProductosActivity.class);
		lanzar.putExtras(datos);
		startActivity(lanzar);
	}

	@Override
	public void recibirRespuesta(Respuesta[] resp, String tipoResp) {
		if(tipoResp.equals("Categorias")) {			
			Pojo[] pojos=resp[0].getPojos();
			tProd=new TipoProducto[pojos.length];
			for(int i=0;i<pojos.length;i++) {
				tProd[i]=(TipoProducto)pojos[i];
			}
			ArrayAdapter<TipoProducto> adapter=new ArrayAdapter<TipoProducto>(this,
					android.R.layout.simple_list_item_1, tProd);
			spCategorias.setAdapter(adapter);
		} else if(tipoResp.equals("Subcategorias")) {
			Pojo[] pojos=resp[0].getPojos();
			categorias=new Categoria[pojos.length];
			for(int i=0;i<pojos.length;i++) {
				categorias[i]=(Categoria)pojos[i];
			}
			ArrayAdapter<Categoria> adapter=new ArrayAdapter<Categoria>(this,
					android.R.layout.simple_list_item_1, categorias);
			spSubcategorias.setAdapter(adapter);
		}
	}

	@Override
	public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
		if(actionId==R.id.busquedaAvanzAction || actionId==EditorInfo.IME_NULL) {
			busqAvanz();
			return true;
		}
		return false;
	}

	@Override
	public void onItemSelected(AdapterView<?> sp, View item, int pos,
			long id) {
		TipoProducto tp= (TipoProducto)spCategorias.getItemAtPosition(pos);
		TareaConexionBD tbd=new TareaConexionBD(Servicio.getHost(), Servicio.getPuerto(), this, "Subcategorias");
		tbd.execute(Servicio.getSubcategorias(tp.getId()));
	}

	@Override
	public void onNothingSelected(AdapterView<?> arg0) {
		// TODO Auto-generated method stub
		
	}
}
